package ru.dadle8.service.impl.bot;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import ru.dadle8.model.bot.entity.ContentMessage;
import ru.dadle8.model.bot.entity.InfoMessage;
import ru.dadle8.model.bot.entity.VideoContent;
import ru.dadle8.service.api.bot.ContentMessageService;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class ContentMessageServiceImpl implements ContentMessageService {

    @Override
    public ContentMessage getStartContentMessage(int actionId) {
        return getSortedContentMessages(actionId).stream()
                .filter(contentMessage -> contentMessage.getType() == 1)
                .findFirst()
                .orElse(null);
    }

    @Override
    public List<ContentMessage> getSortedContentMessages(int actionId) {
        return getSortedContentMessages().stream()
                .filter(contentMessage -> actionId == contentMessage.getActionId())
                .sorted(ContentMessage::compareTo)
                .collect(Collectors.toList());
    }

    @Override
    public ContentMessage getNextContentMessage(int actionId, int order) {
        return getSortedContentMessages(actionId).stream()
                .filter(contentMessage -> contentMessage.getOrder() > order)
                .findFirst()
                .orElse(null);
    }

    @Override
    public boolean hasNextContentMessage(int actionId, int order) {
        return getSortedContentMessages(actionId).stream()
                .anyMatch(contentMessage -> contentMessage.getOrder() > order);
    }

    @Override
    public List<ContentMessage> getSortedContentMessages() {
        List<ContentMessage> contentMessages = new ArrayList<>();

        // Гипертрофия (объём)
        InfoMessage infoMessage1 = new InfoMessage();
        infoMessage1.setActionId(7000);
        infoMessage1.setOrder(0);
        infoMessage1.setType(1); // start message
        infoMessage1.setMessage("""
                ✨✨✨✨✨✨✨✨✨✨✨✨✨
                Супэрр тренировка!
                ✨От лучшего тренера страны✨
                ✨✨✨✨✨✨✨✨✨✨✨✨✨
                """);
        contentMessages.add(infoMessage1);

        ContentMessage gym1 = new ContentMessage();
        gym1.setActionId(7000); // Тренировка на плечи
        gym1.setOrder(1);
        gym1.setType(2); // content message
        gym1.setMessage("""
                Армейский жим
                                
                1 подход - с лёгким весом на 15 раз для разминки
                                
                3 подхода - рабочие, по 12 раз до околоотказного состояния
                """);
        gym1.addVideo(new VideoContent("BAACAgIAAxkBAAIIE2Z4hQ4OMBQBDGRffsxJ7RJOI-O1AAL4QQACnmrISyypf3ejH9SqNQQ", StringUtils.EMPTY));
        contentMessages.add(gym1);

        ContentMessage gym2 = new ContentMessage();
        gym2.setActionId(7000);
        gym2.setOrder(2);
        gym2.setType(2);
        gym2.setMessage("""
                Тяга к подбородку широким хватом
                                
                4 подхода - рабочие, по 12 раз до околоотказного состояния
                """);
        contentMessages.add(gym2);

        ContentMessage gym3 = new ContentMessage();
        gym3.setActionId(7000);
        gym3.setOrder(3);
        gym3.setType(2);
        gym3.setMessage("""
                Махи в сторону в наклоне сидя
                                
                4 подхода - рабочие, по 15 раз до отказного состояния
                """);
        contentMessages.add(gym3);

        ContentMessage gym4 = new ContentMessage();
        gym4.setActionId(7000);
        gym4.setOrder(4);
        gym4.setType(2);
        gym4.setMessage("""
                Тяга в опоре грудью
                                
                4 подхода - рабочие, до отказного состояния по 12 раз
                """);
        contentMessages.add(gym4);

        ContentMessage gym5 = new ContentMessage();
        gym5.setActionId(7000);
        gym5.setOrder(5);
        gym5.setType(2);
        gym5.setMessage("""
                Махи гантелями в сторону стоя
                                
                4 подхода - рабочие, по 10 раз до отказа
                """);
        contentMessages.add(gym5);

        // Растяжка
        ContentMessage stretch1 = new ContentMessage();
        stretch1.setActionId(2001);
        stretch1.setOrder(1);
        stretch1.setType(2);
        stretch1.setMessage("""
                🟢 В каждом положении начинаем от 40 секунд;
                                
                🟢 Время постепенно увеличиваем;
                                
                🟢 Силу растяжения постепенно увеличиваем;
                                
                🟢 Выполняем от 3 кругов;
                                
                🟢 Дышим плавно, спокойно;
                                
                🟢  На каждый выдох расслабляемся
                """);
        contentMessages.add(stretch1);

        ContentMessage stretch2 = new ContentMessage();
        stretch2.setActionId(2002); // Мобильность коленного сустава
        stretch2.setOrder(1);
        stretch2.setType(2);
        stretch2.setMessage("""
                🟢 Все движения плавные и подконтрольные, без резких движений;
                                
                🟢 В каждом положении от 40секунд с постепенным увеличением время натяжения
                """);
        contentMessages.add(stretch2);

        ContentMessage stretch3 = new ContentMessage();
        stretch3.setActionId(2003); // Разминка тазоберденного сустава
        stretch3.setOrder(1);
        stretch3.setType(2);
        stretch3.setMessage("""
                🟢 По 20 повторений в каждом положении на каждую ногу;
                                
                🟢 Все движения выполняем в максимальную амплитуду
                """);
        contentMessages.add(stretch3);

        ContentMessage stretch4 = new ContentMessage();
        stretch4.setActionId(2004); // Разминка коленного сустава
        stretch4.setOrder(1);
        stretch4.setType(2);
        stretch4.setMessage("""
                🟢 В каждом положении от 20 повторений
                """);
        contentMessages.add(stretch4);

        return contentMessages;
    }

}
